#include "Soldier.h"

//#include <malloc.h>
#include <sys/malloc.h>
#include <stdio.h>

//二级指针，在函数内部改变外部指针的指向, 当然还可以使用return的方式来实现，
//但是只能return 堆上分配的指针，不能return栈指针.
void createSoldier(Soldier** s){
    *s = (Soldier*)malloc(sizeof(Soldier));

    Gun gun; //没有malloc，是栈上分配的 , 这个地方应该 malloc吗？
    strcpy(gun.name, "AK47");  //不能写成&student1
    gun.type = 'a';
    
    (*s)->gun = gun;

    strcpy((*s)->name, "大兵瑞恩");
}

void attack(Soldier* soldier)
{
   printf("Soldier %s attack , gun %s:\n", soldier->name, soldier->gun.name);
   shoot(soldier->gun);
}

void destorySoldier(Soldier* soldier)
{
   if(soldier != NULL){
       free(soldier);//忘记free会内容泄漏,free不能多了一次，也不能少了一次
       soldier = NULL;//一定要记得NULL,否则变成了野指针
   }
   //还需要回收 Gun的堆上的内存
   //野指针， 内存泄漏
}
